
	<!-- 1 -->
    <Container Name="SEQC - Check If Cache File Exists" ForcedExecutionValueDataType="Empty" ConstraintMode="Parallel">
        <Tasks>
            <Script Name="SCT_FILE_EXIST" ForcedExecutionValueDataType="Empty" ProjectCoreName="SCT_FILE_EXIST">
                <ScriptTaskProjectReference ScriptTaskProjectName="SCT_FILE_EXIST" />
            </Script>
            <Dataflow Name="Load Table <#=ssisSafeScopedName#>">
                <PrecedenceConstraints LogicalType="And">
                    <Inputs>
                        <Input OutputPathName="SCT_FILE_EXIST.Output" EvaluationValue="Success" EvaluationOperation="Expression" Expression="@fileExist==false"/>
                    </Inputs>
                </PrecedenceConstraints>
                <Transformations>
                    <OleDbSource Name="OLE_SRC - cache <#=ssisSafeScopedName#>" ConnectionName="Source" ValidateExternalMetadata="false">
                        <DirectInput><#=TargetNode.GetTag("cacheQuery")#></DirectInput>
                    </OleDbSource>
                    <Cache Name="CT - cache<#=ssisSafeScopedName#>" LocaleId="None" ConnectionName="cache<#=ssisSafeScopedName#>">
                        <InputPath OutputPathName="OLE_SRC - cache <#=ssisSafeScopedName#>.Output" />
                    </Cache>
                </Transformations>
            </Dataflow>
        </Tasks>
    </Container>
	
	<!-- 2 -->
    <# var precedence = @"<PrecedenceConstraints><Inputs><Input OutputPathName=""SEQC - Check If Cache File Exists.Output"" /></Inputs></PrecedenceConstraints><Transformations>"; 
	#>
    <#=TargetNode.GetBiml().Replace("<Transformations>", precedence)#>
	
	<!-- 3 -->
					<Annotations>
						<Annotation AnnotationType="Tag" Tag="InitialiseTarget">InitialiseTarget</Annotation>
                        <Annotation AnnotationType="Tag" Tag="ssisSafeScopedName"><#=tableNode.SsisSafeScopedName#></Annotation>
                    	<Annotation AnnotationType="Tag" Tag="cacheQuery"><#=cacheQuery#></Annotation>
					</Annotations>
					
	<!-- 4 -->
    <Script Name="SCT_PROCESS_FILE" ForcedExecutionValueDataType="Empty" ProjectCoreName="SCT_PROCESS_FILE">
        <PrecedenceConstraints>
            <Inputs>
                <Input OutputPathName="<#=TargetNode.Name#>.Output" />
            </Inputs>
        </PrecedenceConstraints>
        <ScriptTaskProjectReference ScriptTaskProjectName="SCT_PROCESS_FILE" />
    </Script>
	
	<!-- 5 -->
    <CustomComponent Name="VCK - Checksum for Columns" ComponentTypeName="Bimp.SSIS.Checksum, Bimp.SSIS.Checksum, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d976e30bc066892c">
        <InputPaths>
            <InputPath OutputPathName="<#=TargetNode.Name#>.Output" Identifier="ChecksumInput">
                <InputColumns>
                 <#	foreach(var column in tableNode.Columns.Where(c => c.ScdType == ScdType.Key)) {#>
                    <InputColumn SourceColumn="<#=column.Name#>" />
                 <#	} #>
                </InputColumns>
            </InputPath>
        </InputPaths>
        <OutputPaths>
            <OutputPath Name="ChecksumOutput" ErrorOrTruncationOperation="" SynchronousInput="ChecksumInput" ExclusionGroup="1">
                <OutputColumns>
                    <OutputColumn Name="RowChecksum" Length="20" DataType="Binary" ErrorOrTruncationOperation="">
                        <CustomProperties>
                            <Property Name="Checksum" DataType="String" TypeConverter="" UITypeEditor="">Checksum</Property>
                        </CustomProperties>
                    </OutputColumn>
                </OutputColumns>
            </OutputPath>
        </OutputPaths>
    </CustomComponent>
    <Lookup Name="LKP - <#=ssisSafeScopedName#>" CacheConnectionName="cache<#=ssisSafeScopedName#>" NoMatchBehavior="IgnoreFailure">
        <InputPath OutputPathName="VCK - Checksum for Columns.ChecksumOutput"/>
        <Inputs>
            <#	foreach(var keyColumn in tableNode.Columns.Where(c => c.ScdType == ScdType.Key)) {#>
            <Column SourceColumn="<#=keyColumn.Name#>" TargetColumn="<#=keyColumn.Name#>" />
            <#	} #>
        </Inputs>
        <Outputs>
            <Column SourceColumn="RowChecksum" TargetColumn="lkpRowChecksum" />
        </Outputs>
    </Lookup>
    <DerivedColumns Name="DC - RowChecksum Default">
        <InputPath OutputPathName="LKP - <#=ssisSafeScopedName#>.Match"/>
        <Columns>
            <Column Name="lkpRowChecksum" Length="20" DataType="Binary" ReplaceExisting="true">ISNULL(lkpRowChecksum) ? (DT_BYTES,20)"00000000" : lkpRowChecksum</Column>
        </Columns>
    </DerivedColumns>
	
	<!-- 6 -->
	<Annotations>
								<Annotation AnnotationType="Tag" Tag="AddSource">AddSource</Annotation>
								<Annotation AnnotationType="Tag" Tag="ssisSafeScopedName"><#=tableNode.SsisSafeScopedName#></Annotation>
								<Annotation AnnotationType="Tag" Tag="scopedName"><#=tableNode.ScopedName#></Annotation>
						    </Annotations>
	
	
	<!-- 7 -->
    <Multicast Name="MLTC - Target and Cache">
		<OutputPaths>
			<OutputPath Name="Extract" SsisName="ExtractPath" />
			<OutputPath Name="ExtractCache" SsisName="ExtractCachePath" />
        </OutputPaths>
    </Multicast>
	<Cache Name="CT - cache<#=ssisSafeScopedName#> Current" LocaleId="None" ConnectionName="cache<#=ssisSafeScopedName#>Current">
		<InputPath OutputPathName="MLTC - Target and Cache.ExtractCache" />
    </Cache>
	<ConditionalSplit Name="CSPL - Identify Change">
	    <InputPath OutputPathName="MLTC - Target and Cache.Extract" />
	    <OutputPaths>
	        <OutputPath Name="Change">
				<Expression>(DT_STR,40,1252)lkpRowChecksum == (DT_STR,40,1252)(DT_BYTES,20)"00000000" || (DT_STR,40,1252)lkpRowChecksum != (DT_STR,40,1252)RowChecksum</Expression>
			</OutputPath>
	    </OutputPaths>
	</ConditionalSplit>
	<RawFileDestination Name="RTF - Output File">
		<InputPath OutputPathName="CSPL - Identify Change.Change" />
        <FileFromVariableOutput VariableName="User.OutputFile"/>
    </RawFileDestination>
	
	<!-- 8 -->
	<Annotations>
								<Annotation AnnotationType="Tag" Tag="AddTarget">AddTarget</Annotation>
								<Annotation AnnotationType="Tag" Tag="ssisSafeScopedName"><#=tableNode.SsisSafeScopedName#></Annotation>
						    </Annotations>
	